﻿using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Security.Principal;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
using eepg_contratos.Models;
using System.Data;
using eepg_contratos.Utilities;
using System.IO;
using System.Collections;

namespace eepg_contratos.Controllers
{
    
    public class SeguridadesController : Controller
    {

        AppUtil u = new AppUtil();

        public ActionResult Acceso()
        {
            return View();
        }

        public ActionResult Usuarios()
        {
            return View();
        }

        public ActionResult Roles()
        {
            return View();
        }

        public ActionResult Opciones()
        {
            return View();
        }

        public ActionResult VerificarUsuario(String usuario, String password)
        {
            UsuarioModel a = new UsuarioModel();
            SeguridadesServices ss = new SeguridadesServices();
            a.usuario = Request.Form["usuario"];
            a.password = Request.Form["password"];
            a = ss.VerificarUsuario(a);

            Session["UserCode"] = a.codigo;
            Session["UserName"] = a.nombre;
            Session["UserRol"] = a.codigo_rol;
            Session["Message"] = "";

            if (a.codigo == ""){
                Session["Message"] = "Usuario incorrecto o contraseña no válida.";
                return View("Acceso");
            }
            else{
                return RedirectToAction("Inicio", "Home");
            }
           
        }

        public String GenerarMenu()
        {

            String html = "";
            SeguridadesServices ss = new SeguridadesServices();
            html = ss.GenerarMenu((String)Session["UserRol"]);
            return html;
        }

        public ActionResult CerrarSesion()
        {
            Session["UserCode"] = "";
            Session["UserName"] = "";
            Session["Message"] = "";
            Session["UserRol"] = "";
            Session["GuidOption"] = "";
            Session["ActiveMenu"] = "";
            Session["PermisoOpcion"] = "";

            return RedirectToAction("Inicio", "Home");
        }

        public String VerificarPermisosOpcion(String guid_opcion, String guid_rol)
        {
            String permisos = "";
            SeguridadesServices ss = new SeguridadesServices();
            RolOpcionModel ro = new RolOpcionModel();
            ro.guid_opcion = guid_opcion;
            ro.guid_rol = guid_rol;
            ro = ss.VerificarPermisosOpcion(ro);

            if (ro.acceder == "" || ro.acceder == null)
            {
                permisos = "-1";
            }
            else
            {
                permisos = ro.acceder + "," + ro.borrar + "," + ro.editar + "," + ro.exportar + "," + ro.importar + "," + ro.listar + "," + ro.ver;
            }
            return permisos;
        }

        public String ListarUsuarios()
        {
            String html = "";
            DataTable dt = new DataTable();
            SeguridadesServices ss = new SeguridadesServices();

            dt = ss.ListarUsuarios();
            String resultados = "<h3>Usuarios encontrados : " + dt.Rows.Count.ToString() + "</h3>";
            html = resultados + u.DataTableToHtml(dt, "tableUsuarios");

            return html;
        }

        public String ListarRoles(String tipo_presentacion)
        {
            String lista = "";
            SeguridadesServices ss = new SeguridadesServices();
            ArrayList arr = new ArrayList();
            arr = ss.ListarRoles();

            String presentacion = Request.Form["tipo_presentacion"];
            lista = u.ArrayToHtml(arr, presentacion);

            return lista;
        }

        public String ListarPadres(String tipo)
        {
            String lista = "";
            SeguridadesServices ss = new SeguridadesServices();
            ArrayList arr = new ArrayList();
            arr = ss.ListarPadres();

            lista = u.ArrayToHtml(arr, tipo);

            return lista;
        }

        public String ListarOpciones()
        {
            String html = "";
            DataTable dt = new DataTable();
            SeguridadesServices ss = new SeguridadesServices();

            dt = ss.ListarOpciones();
            String resultados = "<h3>Opciones encontradas : " + dt.Rows.Count.ToString() + "</h3>";
            html = resultados + u.DataTableToHtml(dt, "tableOpciones");

            return html;
        }

        public String ListarOpcionesDisponiblesPorRol(String guid_rol)
        {
            String lista = "";
            SeguridadesServices ss = new SeguridadesServices();
            ArrayList arr = new ArrayList();
            arr = ss.ListarOpcionesDisponiblesPorRol(guid_rol);

            lista = u.ArrayToHtml(arr, "table");

            return lista;
        }

        public String ListarOpcionesPorRol(String guid_rol)
        {
            String html = "";
            DataTable dt = new DataTable();
            SeguridadesServices ss = new SeguridadesServices();

            dt = ss.ListarOpcionesPorRol(guid_rol);
            String resultados = "<h3>Opciones asociadas : " + dt.Rows.Count.ToString() + "</h3>";
            html = resultados + u.DataTableToHtml(dt, "tableOpcionesPermisos");

            return html;
        }

        public String ConsultarUsuario(String guid)
        {
            String data = "";
            SeguridadesServices ss = new SeguridadesServices();
            ArrayList arr = new ArrayList();
            arr = ss.ConsultarUsuario(guid);
            data = u.UsuarioArrayToXml(arr);

            return data;
        }

        public String ConsultarOpcion(String guid)
        {
            String data = "";
            SeguridadesServices ss = new SeguridadesServices();
            ArrayList arr = new ArrayList();
            arr = ss.ConsultarOpcion(guid);
            data = u.OpcionArrayToXml(arr);

            return data;
        }

        public String ConsultarPermisoOpcion(String guid)
        {
            String data = "";
            SeguridadesServices ss = new SeguridadesServices();
            ArrayList arr = new ArrayList();
            arr = ss.ConsultarPermisoOpcion(guid);
            data = u.PermisoArrayToXml(arr);

            return data;
        }

        public String GuardarUsuarioAction()
        {
            UsuarioModel a = new UsuarioModel();
            SeguridadesServices ss = new SeguridadesServices();

            a.codigo = Request.Form["codigo"];
            a.usuario = Request.Form["usuario"];
            a.password = Request.Form["password"];
            a.nombre = Request.Form["nombre"];
            a.observacion = Request.Form["observacion"];
            a.id_estado = Request.Form["id_estado"];

            a.guid = Request.Form["guid"];
            if (a.guid.Trim().Length == 0)
            {
                a.guid = Guid.NewGuid().ToString();
            }
            
            a.usuario_ing = Request.Form["usuario_ing"];
            a.codigo_rol = Request.Form["guid_rol"];

            String mensaje = ss.GuardarUsuario(a);

            return mensaje;
        }

        public String GuardarOpcionAction()
        {
            OpcionModel a = new OpcionModel();
            SeguridadesServices ss = new SeguridadesServices();

            a.descripcion = Request.Form["descripcion"];
            a.url = Request.Form["url"];
            a.imagen = Request.Form["imagen"];
            a.guid_padre = Request.Form["guid_padre"];
            a.id_estado = Request.Form["id_estado"];

            a.guid = Request.Form["guid"];
            if (a.guid.Trim().Length == 0)
            {
                a.guid = Guid.NewGuid().ToString();
            }

            a.usuario_ing = Request.Form["usuario_ing"];

            String mensaje = ss.GuardarOpcion(a);

            return mensaje;
        }

        public String GuardarPermisoOpcionAction()
        {
            RolOpcionModel a = new RolOpcionModel();
            SeguridadesServices ss = new SeguridadesServices();

            a.guid_rol = Request.Form["guid_rol"];
            a.guid_opcion = Request.Form["guid_opcion"];
            a.acceder = Request.Form["acceder"];
            a.borrar = Request.Form["borrar"];
            a.editar = Request.Form["editar"];
            a.exportar = Request.Form["exportar"];
            a.importar = Request.Form["importar"];
            a.listar = Request.Form["listar"];
            a.ver = Request.Form["ver"];

            a.guid = Request.Form["guid"];
            if (a.guid.Trim().Length == 0)
            {
                a.guid = Guid.NewGuid().ToString();
            }

            a.usuario_ing = Request.Form["usuario_ing"];

            String mensaje = ss.GuardarPermisoOpcion(a);

            return mensaje;
        }

        public String GuardarRolAction()
        {
            RolModel r = new RolModel();
            SeguridadesServices ss = new SeguridadesServices();

            r.descripcion = Request.Form["descripcion"];
            r.id_estado = Request.Form["id_estado"];
            r.guid = Request.Form["guid"];

            if (r.guid.Trim().Length == 0)
            {
                r.guid = Guid.NewGuid().ToString();
            }

            r.usuario_ing = Request.Form["usuario_ing"];

            String mensaje = ss.GuardarRol(r);

            return mensaje;
        }

        public String EliminarUsuario(String guid)
        {
            UsuarioModel a = new UsuarioModel();
            SeguridadesServices ss = new SeguridadesServices();
            a.guid = Request.Form["guid"];
            ss.EliminarUsuario(a);

            return "";
        }

        public String EliminarOpcion(String guid)
        {
            OpcionModel o = new OpcionModel();
            SeguridadesServices ss = new SeguridadesServices();
            o.guid = Request.Form["guid"];
            ss.EliminarOpcion(o);

            return "";
        }

        public String EliminarRol(String guid)
        {
            RolModel o = new RolModel();
            SeguridadesServices ss = new SeguridadesServices();
            o.guid = Request.Form["guid"];
            ss.EliminarRol(o);

            return "";
        }

    }
}
